<?php
	/**
	 * Clase Controlador, esta clase es una de las principales ya que 
	 * los controladores heredan de los atributos y metedos de estas clase.
	 * 
	 * @author Miguel Angel Villanueva Rengifo.
	 * @version 0.1
	 * @package clases-generales
	 *
	 */
	class Settings {
		/**
		* Instancia de la clase Settings.
        * @var Object
        * @access private
        */
    	private static $instance;
    	
    	/**
		* Arreglo que contiene los datos leidos del archivo.
        * @var array
        * @access private
        */ 
    	private $settings; 
    
    	/*
    	* Constructor de la clase Settings.
    	* @param string $ini_file Nombre del archivo que contiene la informacion a leer.
    	*/
    	private function __construct($ini_file='../config/configuracion.ini') { 
    	    $this->settings = parse_ini_file($ini_file, true); 
    	} 
    
    	/*
    	* Metodo que genera una instancia de la clase Settings.
    	* @param string $ini_file Nombre del archivo que contiene la informacion a leer.
    	* @return Object Instancia de la clase Settings.
    	*/
    	public static function getInstance($ini_file='../config/configuracion.ini') { 
    	    if(! isset(self::$instance)) { 
    	        self::$instance = new Settings($ini_file);            
    	    } 
    	    return self::$instance; 
    	} 
    
    	/*
    	* Metodo que devuele algun dato del archivo leido.
    	* El metodo puede devolver un entero, una cadena o un arreglo, eso depende del tipo de dato que se haya creado en el archivo, 
    	* para el caso de que sea todo un bloque el metodo devolvera un arreglo asociativo.
    	* @param string $setting Nombre del atributo que se desea recuperar.
    	* @return Object 
    	*/
    	public function __get($setting) { 
    	    if(array_key_exists($setting, $this->settings)) { 
    	        return $this->settings[$setting]; 
    	    } else { 
    	        foreach($this->settings as $section) { 
    	            if(array_key_exists($setting, $section)) { 
    	                return $section[$setting]; 
    	            } 
    	        } 
    	    } 
    	} 
	} 
?>
